package cn.kinoko.service.auth;

import cn.kinoko.model.auth.req.EmailCodeReq;
import cn.kinoko.model.auth.req.LoginReq;
import cn.kinoko.model.auth.req.RegisterReq;
import cn.kinoko.model.auth.req.ResetPwdReq;
import cn.kinoko.model.auth.vo.CaptchaVO;
import cn.kinoko.model.auth.vo.TokenAuthVO;
import jakarta.servlet.http.HttpServletRequest;


/**
 * @author kinoko
 */
public interface AuthService {

    /**
     * 验证码生成
     *
     * @param request 请求信息
     * @return 验证码视图
     */
    CaptchaVO buildCaptcha(HttpServletRequest request);

    /**
     * 新用户注册
     *
     * @param req     用户注册信息
     * @param request 请求信息
     * @return 执行结果
     */
    boolean register(RegisterReq req, HttpServletRequest request);

    /**
     * 用户登录
     *
     * @param loginInfo 用户信息
     * @param request   请求信息
     * @return 认证信息
     */
    TokenAuthVO login(LoginReq loginInfo, HttpServletRequest request);

    /**
     * 刷新token
     *
     * @return token
     */
    TokenAuthVO refresh();

    /**
     * 验证验证码
     *
     * @param sessionId     请求id
     * @param captchaAnswer 验证码答案
     */
    void checkCaptcha(String sessionId, String captchaAnswer);

    /**
     * 发送邮箱验证码
     *
     * @param req     请求信息
     * @param request 请求信息
     * @return 执行结果
     */
    boolean sendEmailCode(EmailCodeReq req, HttpServletRequest request);

    /**
     * 重置密码
     *
     * @param req 请求参数
     * @return 执行结果
     */
    boolean resetPwd(ResetPwdReq req);
}